/**
 * 认证相关API接口
 * 基于后端API文档实现
 */

import request from '../utils/request.js'

export const authApi = {
  /**
   * 用户注册
   * @param {Object} data - 注册数据
   * @param {string} data.email - 邮箱
   * @param {string} data.password - 密码
   * @param {string} data.username - 用户名
   */
  register(data) {
    return request.post('/user/auth/register', data)
  },

  /**
   * 邮箱验证
   * @param {Object} data - 验证数据
   * @param {string} data.email - 邮箱
   * @param {string} data.code - 验证码
   */
  verifyEmail(data) {
    return request.post('/user/auth/verify-email', data)
  },

  /**
   * 用户登录
   * @param {Object} data - 登录数据
   * @param {string} data.usernameOrEmail - 用户名或邮箱
   * @param {string} data.password - 密码
   */
  login(data) {
    return request.post('/user/auth/login', data)
  },

  /**
   * 刷新令牌
   * @param {Object} data - 刷新数据
   * @param {string} data.refreshToken - 刷新令牌
   */
  refreshToken(data) {
    return request.post('/user/auth/refresh', data)
  },

  /**
   * 忘记密码
   * @param {Object} data - 忘记密码数据
   * @param {string} data.email - 邮箱
   */
  forgotPassword(data) {
    return request.post('/user/auth/password/forgot', data)
  },

  /**
   * 重置密码
   * @param {Object} data - 重置密码数据
   * @param {string} data.email - 邮箱
   * @param {string} data.code - 验证码
   * @param {string} data.newPassword - 新密码
   */
  resetPassword(data) {
    return request.post('/user/auth/password/reset', data)
  },

  /**
   * 用户登出
   */
  logout() {
    return request.post('/user/auth/logout')
  },

  /**
   * 获取用户信息
   */
  getProfile() {
    return request.get('/user/auth/profile')
  },

  /**
   * 发送邮箱验证码（兼容旧接口）
   * @param {Object} data - 数据
   * @param {string} data.email - 邮箱
   * @param {string} data.type - 验证码类型（register/reset）
   */
  sendVerificationCode(data) {
    // 注册时自动发送验证码，重置密码时调用forgotPassword
    if (data.type === 'reset') {
      return this.forgotPassword({ email: data.email })
    }
    // 注册时不需要单独发送验证码，注册接口会自动发送
    return Promise.resolve({ message: '验证码将在注册时自动发送' })
  },

  /**
   * 第三方登录（预留接口）
   * @param {Object} data - 第三方登录数据
   * @param {string} data.provider - 第三方平台（wechat/qq/github等）
   * @param {string} data.code - 授权码
   */
  socialLogin(data) {
    return request.post('/user/auth/social-login', data)
  },

  /**
   * 获取第三方登录配置（预留接口）
   */
  getSocialConfig() {
    return request.get('/user/auth/social-config')
  },

  /**
   * 测试API连接
   */
  testConnection() {
    return request.get('/user/auth/profile')
  },

  /**
   * 人脸注册
   * @param {Object} data - 人脸注册数据
   * @param {string} data.email - 邮箱
   * @param {string} data.username - 用户名
   * @param {string} data.password - 密码
   * @param {string} data.nickname - 昵称
   * @param {string} data.faceImagePath - 人脸图片路径（base64或文件路径）
   */
  faceRegister(data) {
    console.log('人脸注册API调用，数据:', {
      email: data.email,
      username: data.username,
      nickname: data.nickname,
      hasFaceImage: !!data.faceImagePath
    })

    // #ifdef H5
    // H5环境使用FormData方式上传
    const formData = new FormData()
    formData.append('email', data.email)
    formData.append('username', data.username)
    formData.append('password', data.password)
    formData.append('nickname', data.nickname)

    // 处理base64图片数据
    if (data.faceImagePath && data.faceImagePath.startsWith('data:image/')) {
      // 将base64转换为Blob
      const base64Data = data.faceImagePath.split(',')[1]
      const byteCharacters = atob(base64Data)
      const byteNumbers = new Array(byteCharacters.length)
      for (let i = 0; i < byteCharacters.length; i++) {
        byteNumbers[i] = byteCharacters.charCodeAt(i)
      }
      const byteArray = new Uint8Array(byteNumbers)
      const blob = new Blob([byteArray], { type: 'image/jpeg' })
      formData.append('faceImage', blob, 'face.jpg')
    }

    return request.post('/user/auth/face-register', formData)
    // #endif

    // #ifndef H5
    // 非H5环境使用UniApp的文件上传方法
    return request.upload('/user/auth/face-register', data.faceImagePath, {
      name: 'faceImage',
      formData: {
        email: data.email,
        username: data.username,
        password: data.password,
        nickname: data.nickname
      }
    })
    // #endif
  },

  /**
   * 人脸登录
   * @param {Object} data - 人脸登录数据
   * @param {string} data.username - 用户名
   * @param {string} data.faceImagePath - 人脸图片路径（base64或文件路径）
   */
  faceLogin(data) {
    console.log('人脸登录API调用，用户名:', data.username)

    // #ifdef H5
    // H5环境使用FormData方式上传
    const formData = new FormData()
    formData.append('username', data.username)

    // 处理base64图片数据
    if (data.faceImagePath && data.faceImagePath.startsWith('data:image/')) {
      // 将base64转换为Blob
      const base64Data = data.faceImagePath.split(',')[1]
      const byteCharacters = atob(base64Data)
      const byteNumbers = new Array(byteCharacters.length)
      for (let i = 0; i < byteCharacters.length; i++) {
        byteNumbers[i] = byteCharacters.charCodeAt(i)
      }
      const byteArray = new Uint8Array(byteNumbers)
      const blob = new Blob([byteArray], { type: 'image/jpeg' })
      formData.append('faceImage', blob, 'face.jpg')
    }

    return request.post('/user/auth/face-login', formData)
    // #endif

    // #ifndef H5
    // 非H5环境使用UniApp的文件上传方法
    return request.upload('/user/auth/face-login', data.faceImagePath, {
      name: 'faceImage',
      formData: {
        username: data.username
      }
    })
    // #endif
  },

  /**
   * 人脸信息更新
   * @param {Object} data - 人脸更新数据
   * @param {string} data.faceImage - 新的人脸图片路径
   */
  updateFaceInfo(data) {
    const formData = new FormData()

    if (data.faceImage) {
      formData.append('faceImage', {
        uri: data.faceImage,
        type: 'image/jpeg',
        name: 'face.jpg'
      })
    }

    return request.put('/user/auth/face-info', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    })
  },

  /**
   * 删除人脸信息
   */
  deleteFaceInfo() {
    return request.delete('/user/auth/face-info')
  }
}

export default authApi